package Demo1;

//设计循环队列

import java.util.LinkedList;
import java.util.Queue;

/**
 * MyCircularQueue(k): 构造器，设置队列长度为 k 。
 * Front: 从队首获取元素。如果队列为空，返回 -1 。
 * Rear: 获取队尾元素。如果队列为空，返回 -1 。
 * enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。
 * deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。
 * isEmpty(): 检查循环队列是否为空。
 * isFull(): 检查循环队列是否已满。
 */
class MyCircularQueue {

    int start = 0;  //队列走到哪一步
    int end = 0;
    int k;
    //删除start+1 添加end+1
    int[] elem;
    public MyCircularQueue(int k) {
        elem = new int[k+1];
        this.k = k + 1;
    }

    public boolean enQueue(int value) {
        if(isFull()) {
            return false;
        }
        elem[end] = value;
        end = (end + 1) % k;
        return true;
    }

    public boolean deQueue() {
        if(isEmpty()) {
            return false;
        }
        elem[start] = -1;
        start = (start + 1) % k;
        return true;
    }

    public int Front() {
        if(isEmpty()) {
            return -1;
        }
        return elem[start];
    }

    public int Rear() {
        if(isEmpty()) {
            return -1;
        }

        return elem[(end-1+k)%k];
    }

    public boolean isEmpty() {
        return start == end;
    }

    public boolean isFull() {
        return start == (end + 1) % k;
    }
}


public class t7 {
    public static void main(String[] args) {
        MyCircularQueue m = new MyCircularQueue(5);
        System.out.println(m.isFull());
        m.enQueue(1);
        m.enQueue(2);
        System.out.println(m.isEmpty());
        m.enQueue(3);
        m.enQueue(4);
        m.enQueue(5);
        m.isFull();
        m.enQueue(6);
    }
}
